package com.example.demo.config;

import com.example.demo.entity.User;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@ConfigurationProperties(prefix = "jwt")
@Component
@Data
public class JwtConfig {

    private String secret;

    private long expire;

    /**
     * 签发jwt
     *
     * @param user
     * @return
     */
    public String createJWT(User user) {
        Date date = new Date();
        Date expireDate = new Date(date.getTime() + expire);
        Map<String, Object> claims = new HashMap<>();
        claims.put("name", user.getUsername());
        claims.put("id", user.getId());
        String jwt = Jwts.builder()
                // 设置装载内容
                .setClaims(claims)
                // 签发时间
                .setIssuedAt(date)
                // 过期时间
                .setExpiration(expireDate)
                // jwt主体，用来存放jwt的所有人，可以存用户id或者角色id
//                .setSubject(user.getName())
                .setSubject("test")
                .compact();
        return jwt;
    }

    /**
     * 解析JWT
     *
     * @param jwt
     * @return
     */
    public Claims parseJWT(String jwt) {
        Claims claims = Jwts.parser().setSigningKey(secret).parseClaimsJwt(jwt).getBody();
        return claims;
    }

}
